package scalahighlevel

/**
  * scala柯理化
  *
  * 隐式转换的搜索范围
  * 在当前作用域下查找。这种情形又分两种情况，一个是在当前作用域显示声明的implicit元素，另一个通过import导入的implicit元素。
如果第一种方式没有找到，则编译器会继续在隐式参数类型的隐式作用域里查找。
  一个类型的隐式作用域指的是“与该类型相关联的类型”的所有的伴生对象。
  */
class Curry {



  def f(x:Int,y:Int):Int=x+y

  def g(x:Int):Int=f(x,1)

  /*
  普通方法
   */
//  def add(x:Int,y:Int):Int=x+y
  /*
  柯理化后
   */
  def add(x:Int)(implicit y:Int):Int=x+y
}


object Curry {

  implicit val y:Int=5

  def main(args: Array[String]): Unit = {
    val curry=new Curry
    val r=curry.add(7)(8)
    println(r)
  }
}
